package com.camemax.netty.nio;

import java.io.*;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

/**
 * Channel Transfer测试：
 *  拷贝一张图片
 *
 */
public class NIOChannelTransfer {
    static String SOURCE_IMG_PATH = "D:\\Javas\\netty\\files\\source_pic.JPG";
    static String TARGET_IMG_PATH = "D:\\Javas\\netty\\files\\target_pic.JPG";
    public static void main(String[] args) throws Exception {
        File source = new File(SOURCE_IMG_PATH);
        File target = new File(TARGET_IMG_PATH);
        channelTransfer(source, target);
    }

    private static void channelTransfer(File source, File target) throws FileNotFoundException {
        // 1、判断源文件是否存在
        if (!source.exists()) {
            throw new FileNotFoundException("SourceFileNotFound");
        }
        try {
            // 2、根据文件输出输入流进行通道创建
            // 2.1、 创建文件输入流，用于读取文件数据
            FileChannel sourceChannel= new FileInputStream(source).getChannel();
            // 2.2、 文件路径检查，并创建其文件输出流，用于拷贝写入
            FilePathCheck.checkDirectories(target);
            FileChannel targetChannel = new FileOutputStream(target).getChannel();

            // 3、 执行TransferFrom拷贝
            targetChannel.transferFrom(sourceChannel, 0, sourceChannel.size());

            // 隐藏3.1、 执行TransferTo拷贝
            // sourceChannel.transferTo(0, sourceChannel.size(), targetChannel);

            System.out.println("拷贝完成!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
